/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Util;

import Daos.UsuarioDao;
import Model.Usuario;
import Model.UsuarioExterno;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.InputMismatchException;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import net.sourceforge.barbecue.BarcodeException;

/**
 *
 * @author Familia Genu
 */
public class Util {

    /**
     * Remove e cria a base de dados no MySQL.
     *
     * @param dataBase Nome da base de dados.
     * @param user Usuario do banco de dados.
     * @param password Senha do banco de dados.
     * @return True se base de dados foi criada. False em caso contrario.
     */
    public static boolean recreateDataBase(String dataBase, String user, String password) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://localhost";
            Connection connection = DriverManager.getConnection(url, user, password);
            Statement statement = connection.createStatement();
            statement.execute("DROP DATABASE IF EXISTS " + dataBase);
            statement.execute("CREATE DATABASE " + dataBase);
            statement.close();
            connection.close();
            return true;
        } catch (Exception ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            return false;
        }
    }

    /**
     * Converte um array de bytes para um objeto ImageIcon.
     *
     * @param imageData Array de bytes com os dados da imagem.
     * @return Objeto ImagemIcon com a imagem.
     */
    public static ImageIcon byteArrayToImageIcon(byte[] imageData) {
        ObjectInputStream objectInputStream = null;
        try {
            ByteArrayInputStream byteArray = new ByteArrayInputStream(imageData);
            objectInputStream = new ObjectInputStream(byteArray);
            return (ImageIcon) objectInputStream.readObject();

        } catch (Exception ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            try {
                objectInputStream.close();
            } catch (IOException ex) {
                Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return null;
    }

    /**
     * Converte um objeto ImageIcon para um array de bytes.
     *
     * @param icon Objeto ImagemIcon com a imagem.
     * @return Array de bytes com os dados da imagem.
     */
    public static byte[] imageIconToByteArray(ImageIcon icon) {
        try {
            ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArray);
            objectOutputStream.writeObject(icon);
            objectOutputStream.flush();
            return byteArray.toByteArray();
        } catch (IOException ex) {
            Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }

    public static String montaComboboxEstado() {
        String aux = "<option>Selecione um Estado</option>\n"
                + "<option>Acre</option>\n"
                + "<option>Alagoas</option>\n"
                + "<option>Amapá</option>\n"
                + "<option>Amazonas</option>\n"
                + "<option>Bahia</option>\n"
                + "<option>Ceará</option>\n"
                + "<option>Distrito Federal</option>\n"
                + "<option>Espírito Santo</option>\n"
                + "<option>Goiás</option>\n"
                + "<option>Maranhão</option>\n"
                + "<option>Mato Grosso</option>\n"
                + "<option>Mato Grosso do Sul</option>\n"
                + "<option>Minas Gerais</option>\n"
                + "<option>Pará</option>\n"
                + "<option>Paraíba</option>\n"
                + "<option>Paraná</option>\n"
                + "<option>Pernambuco</option>\n"
                + "<option>Piauí</option>\n"
                + "<option>Rio de Janeiro</option>\n"
                + "<option>Rio Grande do Norte</option>\n"
                + "<option>Rio Grande do Sul</option>\n"
                + "<option>Rondônia</option>\n"
                + "<option>Roraima</option>\n"
                + "<option>Santa Catarina</option>\n"
                + "<option>São Paulo</option>\n"
                + "<option>Sergipe</option>\n"
                + "<option>Tocantins</option>";
        return aux;
    }

    public static String encriptaSenha(String senha) {
        String sen = "";
        MessageDigest md = null;
        try {
            md = MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        BigInteger hash = new BigInteger(1, md.digest(senha.getBytes()));
        sen = hash.toString(16);
        System.out.println(sen);
        return sen;
    }

    public static boolean validaUsuario(Usuario user) {
        UsuarioDao<Usuario> usuarioDao = new UsuarioDao<>(Usuario.class);
        if (usuarioDao.get(user.getId()) == null) {
            return false;
        } else {
            return true;
        }
    }

    public static String geraSenhaAleatoria() {
        UUID uuid = UUID.randomUUID();
        String myRandom = uuid.toString();
        String senhaAleatoria = myRandom.substring(0, 8);
        return senhaAleatoria;
    }

    public static String senhaAdm() {
        return "admrpa8djs9pet";
    }
}
